use tokio::time;

#[tokio::main]
async fn main() {

    println!("Hello, world!");


    let task1 = tokio::spawn(async {
        time::sleep(time::Duration::from_secs(5)).await;
        println!("task1 end");
        1
    });

    let task2 = tokio::spawn(async {
        time::sleep(time::Duration::from_secs(2)).await;
        println!("task2 end");
        2
    });


    let task3 = tokio::spawn(async {
        time::sleep(time::Duration::from_secs(1)).await;
        println!("task3 end");
        3
    });


    // //使用join宏，等待所有任务完成
    // let (r1,r2,r3) = tokio::join!(task1, task2, task3);
    //
    // // 等3个task都执行完，才会执行下面的语句
    // println!("r1:{},r2:{},r3:{}",r1.unwrap(),r2.unwrap(),r3.unwrap());


    // 使用select宏，等待任意一个任务返回即退出select (其他任务还是会继续执行，只要main函数不退出)
    // let rst = tokio::select! {
    let rst = tokio::select! {
        r = task1 => r.unwrap(),
        r = task2 => r.unwrap(),
        r = task3 => r.unwrap()
    };
    println!("rst:{}",rst);

    time::sleep(time::Duration::from_secs(10)).await;

    println!("main end");
}

